ROADMAP
-------

Version 0.5: 'Graf Zeppelin' [DONE]
----------------------------
+ Rotations are not around the proper unit cube axis.
+ Add global 'set' command
+ 'set maxobjects'
+ Preprocessor Comments
+ Auto load examples to menu item entry.
+ Coloring 
+ GUI: Rotate about z axis
+ Solid Box object
+ Rule retirement:
  + (1) with substitution:  [ RULE r1 maxdepth 400 > r2 weigth 100 { ... } ]
  + (3) plain retirement [ RULE r1 maxdepth 400 weigth 100 { ... } ]
+ Version object
+ Iterated Rules
+ Scale with 3 parameters.
+ Progress dialog w/ cancel.
+ Fix multiple windows problems
+ 'Color' keyword (for absolute color)
+ 'Background' set command 
+ 'set seed'
+ Add 'Reset button' (for OpenGL view)
+ Create a build (resolve dependencies)

Version 0.7: 'Nostromo'
-----------------------
+ Full Screen
+ Tabbed interface
+ Custom Transformation matrix operator.
+ Syntax Highlighter
+ Parser should take {,} as delimiters
+ Screenshot
+ Context Menu in 3D GUI: 'Reset View', 'Save Screenshot', 'Full screen'.
+ Linux testing (should compile with minimum of error on Linux)

Version 0.8: 'Exonautica'
-----------------------------------
Main Focus: Template rendering
+ reproducibility -> control of random seed, 
+ GUI Seed
+ Add Template Renderer (user customizable text templats)
+ Splash screen.
 
Version 0.9: 'Kolberger Heide'
---------------
- save view as eisenscript code.
- Set initial viewport (create expression by right clicking mouse canvas)
- Export view settings to Template Renderers
? 'Zoom to fit'


Version 1.0: 'Potemkin'
-------------------------------
- Preferences (saving with QProperties) [For what?]
- Installers (for Windows at least - using InnoSetup)
- Packaging: Icons, Eula, file associations.
? Version object with check for updates on internet.
? Drag'n'Drop of EisenScript files.

Version 1.5: '?'
----------------
Instead of EisenScript it should be possible to script the object generation using JavaScript.
(Qt has a builtin JavaScript interpreter which should make this somewhat easy).

Version 2.0: '?'
----------------
Emphasizing the 'Synth' of 'Structure Synth (Live Coding / Drawing)
I want to be able to somehow 'play' and 'compose' structures interactively.
I'm thinking about implementing this by making rules dependent on some kind of controller:
where the controller is able to change the states or logic. The controller should be implemented as an abstract interface,
making it easy to provide multiple implementations: for instance, a mouse controller, an OSC controller (which also would 
make structure synth 'playable' by the OSC emitter for the iPod Touch, or by the Wii->OSC app), or a controller which reads 
and parses text into controls (this would make it possible to for instance control the sculpting by providing historical documents, 
spam or other sources of entropy).



Possible Version 1.x extensions:
_-------------------------------
? 'set minvolume'
? Tagging (e.g. [sphereresolution 3 25])
       - OpenGL settings (as tags): Perspective, Fog, Coloring, Res, 
? Ellipsoid object. (as of now spheres are always isotropic]
? Real transperancy (req. sorting) [Easier now we have defined bounding boxes]
? More complex primitives (tube, ...)
? Preprocessor '#include' statement
? Check for infinite retirement substitution cycles.
? Better Progress Bar (include updates for transformations loop, pause button?)
? Rule retirement: ? (2) with subst. and revive: [ RULE r1 maxdepth 400 >> r2 weigth 100 { ... } ]


Possible version 2.x extensions:
--------------------------------
- Textures w. alpha
- 2D Mode
- Parameterized rendering (movies)
  - Random parameters in rule definition
- Option for Synchronize random seed per generation. (Each expanded rule starts at the same seed).
? 4D geometry, creating animations by slicing through the 4th dimension.
? Geometry Distortion plugins (a la fish eye view)
? Meta-programming via the [Tag Renderer]



